// 登录拦截，权限管理
import router from './router'
import store from './store'
import { asyncRoutes } from '@/router'
// 导入进度条
import nProgress from 'nprogress'
import 'nprogress/nprogress.css'
// 路由前置守卫
router.beforeEach(async(to, from, next) => {
  // console.log('进入前置导航')
  nProgress.start() // 开始导航条
  // 如果有token
  // 白名单
  const whiteList = ['/login', '/404']
  if (store.getters.token) {
    // 判断是否去的是登录界面 如果是的话，强制跳转到首页
    if (to.path === '/login') {
      next('/')
      nProgress.start() // 强制跳转到登录界面时，不经过后置导航守卫，单独控制进度条的关闭
    } else {
      // 判断是否有用户信息，如果用户信息存在，不需要再获取用户信息
      if (!store.getters.userId) {
        // 需要先获取用户信息，然后再进行跳转，进入系统页面
        // console.log('获取用户信息')
        const { roles: { menus }} = await store.dispatch('user/getInfo') // 这里位置要处理权限
        // 筛选一下路由，存储到新数组中,判断用户信息中是否包含这些路由
        const filterRoutes = asyncRoutes.filter(item => menus.includes(item.name))
        // console.log(filterRoutes)
        // 存放到vuex中
        store.commit('user/addFilterRoutes', filterRoutes)
        // console.log(menus)
        // 将路由和404放在一块，但是 添加到路由规则
        router.addRoutes([...filterRoutes, { path: '*', redirect: '/404', hidden: true }])
        next(to.path)
      }
      next()
    }
  } else {
    // 判断是否在白名单中
    if (whiteList.includes(to.path)) {
      next() // 放行
    } else {
      next('/login') // 强制跳转到登录
      nProgress.start()
    }
  }
})
// 路由后置守卫
router.afterEach((to, from) => {
  // console.log('进入后置导航')
  // 强制跳转到登录界面时，不经过后置导航守卫，单独控制进度条的关闭
  nProgress.done()
})
